package job.work.service.system.service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import job.work.domain.response.ResponseResult;
import job.work.domain.response.SafetyResponse;
import job.work.domain.system.entity.pojo.DecRole;
import job.work.domain.system.entity.pojo.model.SystemUser;
import job.work.domain.system.request.MenuPageRequest;
import job.work.domain.system.request.SysPageListReq;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface SystemService {


    /**
     * 根据ID和用户名判断名称是否重复
     *
     * @param id       用户ID
     * @param username 用户名
     * @return true/false
     */
    boolean isName(Long id, String username);

    /**
     * 根据ID和手机号判断名称是否重复
     *
     * @param id    用户ID
     * @param phone 手机号
     * @return true/false
     */
    boolean isPhone(Long id, String phone);

    /**
     * 保存或者修改用户信息
     *
     * @param system 用户信息
     * @return 返回数据
     */
    SystemUser save(SystemUser system);

    /**
     * 加密
     *
     * @param password 输入的密码
     * @return 加密后的密码
     */
    String password(String password);

    /**
     * new Predicate[predicates.size()]
     *
     * @param password1 未加密的密码(用户输入的)
     * @param password2 加密后的密码(数据库)
     * @return 返回是否一致
     */
    Boolean password(String password1, String password2);

    /**
     * 根据用户名查询手机号
     *
     * @param username 用户名
     * @return 用户信息
     */
    SystemUser findSystemUserName(String username);

    /**
     * 根据手机号查询用户信息
     *
     * @param mobile 手机号
     * @return 用户信息
     */
    SystemUser findSystemMobile(String mobile);

    /**
     * 根据角色ID查询角色信息
     *
     * @param id 角色ID
     * @return 角色信息
     */
    DecRole findRole(Long id);

    /**
     * 修改密码
     *
     * @param safetyRequestResponse 密码接收类
     * @return ResponseResult
     */
    ResponseResult saveUserPassword(SafetyResponse safetyRequestResponse);

    /**
     * 禁用账户或者解禁账户
     *
     * @param sysId  用户ID
     * @param status 状态
     * @return 是否成功
     */
    ResponseResult prohibitUser(Long sysId, Integer status);

    /**
     * 判断是否需要修改密码
     *
     * @return ResponseResult
     */
    ResponseResult isSysPassword();

    /**
     * 重置当前账号密码
     *
     * @param id  用户ID
     * @param pwd 账号密码
     * @return ResponseResult
     */
    @Transactional
    ResponseResult resetPassword(Long id, String pwd);


    /**
     * 保存管理员信息
     *
     * @param system 管理员实体
     * @return 操作结果
     */

    ResponseResult saveSystem(SystemUser system);


    /**
     * 根据id删除管理员
     *
     * @param id 用户ID
     * @return 操作结果
     */
    ResponseResult deleteById(Long id);


    /**
     * 分页查询数据
     *
     * @param menuPageRequest 请求参数
     * @return 操作数据
     */
    ResponseResult findPageSystem(MenuPageRequest menuPageRequest);


    /**
     * 根据 参数分页查询数据
     *
     * @param sysPageListReq 参数
     * @return 分页数据
     */
    Page<SystemUser> findPageLike(SysPageListReq sysPageListReq);

    /**
     * 根据用户ID保存用户角色
     *
     * @param sysId  用户Id
     * @param roleId 角色ID
     */
    void saveSysRole(Long sysId, Long roleId);

    /**
     * 获取用户信息
     *
     * @return
     */
    ResponseResult pickUpInformation();

    /**
     * 修改钱包
     *
     * @param id     用户Id
     * @param wallet 钱包金额
     */
    void saveWallet(Long id, BigDecimal wallet);







}
